package com.boatAnchorAssistant.service.service.in;

import com.boatAnchorAssistant.pojo.dto.user.CreateAdminUserDto;
import com.boatAnchorAssistant.pojo.dto.user.MoveUserDto;
import javax.validation.Valid;
import nirvana.core.domains.vo.PageResult;
import com.boatAnchorAssistant.pojo.param.user.*;
import com.boatAnchorAssistant.pojo.vo.user.*;
import nirvana.core.utils.ids.IdGenerator;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;


/**
 * 【描 述】：用户服务
 * 【环 境】：J2SE
 * 【详 细】：
 *
 */
public interface UserService {

    /**
     * 创建用户
     * @param param
     */
    void createUser(CreateUserParam param);

    /**
     * 修改用户
     * @param param
     */
    void editUser(EditUserParam param);

    /**
     * 编辑用户头像
     * @param param
     */
    void editUserPhoto(EditUserPhotoParam param);

    /**
     * 编辑用户身份证
     * @param param
     */
    void editUserIdentityCardParam(UploadIdentityCardParam param);

    /**
     * 移除用户
     * @param id
     */
    void removeUser(Long id);

    /**
     * 启动/禁用用户
     * @param id
     */
    void enabledUser(Long id);

    /**
     * 获取用户详情
     * @param id
     * @return
     */
    GetUserVo getUser(Long id);

    /**
     * 获取用户列表
     * @param param
     * @return
     */
    PageResult<GetUserListVo> getUserList(GetUserListParam param);


    /**
     * 获取当前用户信息
     * @return
     */
    GetCurrentUserVo getCurrentUser();


    /**
     * 获取用户下拉列表
     *
     * @param param
     * @return
     */
    List<GetUserDownListVo> getUserDownList(GetUserDownListParam param);


    /**
     * 根据角色获取用户
     * @param param
     * @return
     */
    PageResult<GetUserListByRoleVo> getUserListByRole(GetUserListByRoleParam param);


    /**
     * 用户绑定角色
     * @param param
     */
    void userBingRole(UserBingRoleParam param);


    /**
     * 解除绑定角色
     * @param param
     */
    void userUnbindRole(UserBingRoleParam param);


    /**
     * 重置当前用户密码
     * @param param
     */
    void resetCurrentUserPassword(ResetCurrentUserPasswordParam param);


    /**
     * 编辑用户密码
     * @param param
     */
    void editUserPassword(EditUserPasswordParam param);

    /**
     * 创建系统用户
     *
     * @return
     */
    void createAdminUser(CreateAdminUserDto dto);


    /**
     * 批量删除用户
     *
     * @param idList
     */
    void bathRemoveUser(List<Long> idList);


    /**
     * 批量移动用户到其他部门下
     *
     * @param dto
     */
    void bathMoveUser(MoveUserDto dto);

    /**
     * 获取人脸识别的图片的文件名称
     * @param count
     * @return
     */
    String getUserFileName(Integer count);
}